/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cnc;

import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;

/**
 *
 * @author PiotrGl
 */
public class GCodeInterpreter extends TimerTask{

    static boolean czerwony = true;
    private static long timer = 0;
    private CncDevice cnc;
    private int iloscKrokowNamm = 100; 

    private Pozycja current  = new Pozycja(0,0,0);

    public Pozycja getCurrent() {
        return current;
    }

    public void setCurrent(Pozycja current) {
        this.current = current;
    }
    
    private Pozycja old  = new Pozycja(0,0,0);
    
    private Pozycja kroki  = new Pozycja(0,0,0);
    
    GCodeInterpreter(CncDevice cnc){
        this.cnc = cnc;
    }
    
    public void run() {
        timer ++;
        if (czerwony == true) {
            System.out.println("czerwony");
            czerwony = false;
        } else {
            System.out.println("zielony");
            czerwony = true;
        }
    }
      
    public long getTimer (){
        return timer;
    }
    
    public void interprate(HashMap<String,Float> polecenia){
        //polecenia.get("G")
        System.out.println("G "+Float.toString(polecenia.get("G")));       
        
        old = current;
        
        
        try {
            current.setXf(polecenia.get("X"));
            System.out.println("X "+Float.toString(polecenia.get("X")));
        } catch (Exception e) {
            
        }
        try {
            current.setYf(polecenia.get("Y"));
            System.out.println("Y "+Float.toString(polecenia.get("Y")));
        } catch (Exception e) {
            
        }
        try {
            current.setZf(polecenia.get("Z"));
            System.out.println("Z "+Float.toString(polecenia.get("Z")));
        } catch (Exception e){
            
        }
        
        //kroki = 
        kroki.setXf(current.getXf()-old.getXf());
        kroki.setYf(current.getYf()-old.getYf());
        kroki.setZf(current.getZf()-old.getZf());
      
        
        
    }
    
    // Obliczamy NWD korzystajac z algorytmu zamieszczonego na stronie www.algorytm.org
    public static int nwd(int x, int y) {
        if (x<0) x*=(-1);
        if (y<0) y*=(-1);
        while (x != y) {
        if (x > y)
            x -= y;
        else
            y -= x;
        }
        return x;
    } 
    
    public static int nww(int x, int y) {
        
        return ((x*y)/nwd(x,y));
    }
    
     public static int nww(int x, int y, int z) {
        x = ((x*y)/nwd(x,y));
        return ((x*z)/nwd(x,z));
    }
 
//Obliczamy i wyswietlamy NWW
//System.out.println("NWW liczb " + x + " i " + y + " wynosi: " + ((x*y)/nwd(x,y)));

}

